//给定一个二维数组 array，请返回「螺旋遍历」该数组的结果。 
//
// 螺旋遍历：从左上角开始，按照 向右、向下、向左、向上 的顺序 依次 提取元素，然后再进入内部一层重复相同的步骤，直到提取完所有元素。 
//
// 
//
// 示例 1： 
//
// 
//输入：array = [[1,2,3],[8,9,4],[7,6,5]]
//输出：[1,2,3,4,5,6,7,8,9]
// 
//
// 示例 2： 
//
// 
//输入：array  = [[1,2,3,4],[12,13,14,5],[11,16,15,6],[10,9,8,7]]
//输出：[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
// 
//
// 
//
// 限制： 
//
// 
// 0 <= array.length <= 100 
// 0 <= array[i].length <= 100 
// 
//
// 注意：本题与主站 54 题相同：https://leetcode-cn.com/problems/spiral-matrix/ 
//
// 
//
// Related Topics 数组 矩阵 模拟 👍 611 👎 0


package LeetCode.editor.cn;

/**
 * @author ldltd
 * @date 2025-05-01 14:32:20
 * @description LCR 146.螺旋遍历二维数组
 */
public class ShunShiZhenDaYinJuZhenLcof{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 ShunShiZhenDaYinJuZhenLcof fun=new ShunShiZhenDaYinJuZhenLcof();
	 	 Solution solution = fun.new Solution();
			solution.spiralArray(new int[][]{{1,2,3},{8,9,4},{7,6,5}});
	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int[] spiralArray(int[][] array) {
		if (array == null || array.length == 0 || array[0].length == 0) {
			return new int[0];
		}
        int top=0,bottom=0,left=0,right=0;
		int r=array.length;
		int c=array[0].length;
		bottom=r-1;
		right=c-1;
		int[] res = new int[r*c];
		int idx=0;
		while (true){
			for (int i = left; i <=right; i++) {
				res[idx++]=array[top][i];
			}
			if(++top>bottom)break;
			for (int i = top; i <=bottom; i++) {
				res[idx++]=array[i][right];
			}
			if(--right<left)break;
			for (int i = right; i >=left ; i--) {
				res[idx++]=array[bottom][i];
			}
			if(--bottom<top)break;
			for (int i = bottom; i >=top ; i--) {
				res[idx++]=array[i][left];
			}
			if(++left>right) break;
		}
		return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
